From 644c09b5ef6774831841c607a99199cfe0e0becf Mon Sep 17 00:00:00 2001 From: oliskoli Date: Sat, 29 Apr 2006 16:41:30 +0000 Subject: [PATCH] Check valid range for n before calling acos(n). Set errno always to zero. --- gpsbabel/grtcirc.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/gpsbabel/grtcirc.c b/gpsbabel/grtcirc.c index d2cd3a7fc..752e3f229 100644 --- a/gpsbabel/grtcirc.c +++ b/gpsbabel/grtcirc.c @@ -59,10 +59,18 @@ double radtometers( double rads ) { double gcdist( double lat1, double lon1, double lat2, double lon2 ) { double res; - res = acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2)); - if (errno == EDOM) { /* Math argument out of domain of function */ - errno = 0; - return 0; + + errno = 0; + + res = sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2); + if (res > 1.0) res = 1.0; + else if (res < -1.0) res = -1.0; + + res = acos(res); + + if ((isnan(res)) || (errno == EDOM)) { /* this should never happen: */ + errno = 0; /* Math argument out of domain of function, */ + return 0; /* or value returned is not a number */ } return res; } -- 2.30.2